Skip to content

[None][feat] GEN slot preemption: pause decode requests in place to admit at-risk waiters - #21334

Open
reasonsolo wants to merge 22 commits into
NVIDIA:mainfrom
reasonsolo:user/lizhiz/gen-preemption-pr
Open

reasonsolo wants to merge 22 commits into
NVIDIA:mainfrom
reasonsolo:user/lizhiz/gen-preemption-pr

Conversation

@reasonsolo

@reasonsolo reasonsolo commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

Description

Adds opt-in GEN slot preemption on top of the TTFT-percentile admission queue from #20736. When every decode slot is occupied and a waiter risks missing its TTFT target, the controller pauses a resident decode request and admits the waiter.

  • Paused requests keep KV, recurrent state, and DFlash/DSpark slots while leaving the scheduled batch. Resident pools and their memory estimates reserve the paused cap; CUDA-graph batch limits stay unchanged.
  • tpot_budget prefers the longest resident request and controls mean pause-induced TPOT inflation. target_output_tps prefers requests with output-rate slack, then requests already below target, then bounded sacrifices funded by completion credit.
  • Resumes take priority over new admissions. Maximum-pause expiry forces a resume; displaced decodes retain their state and enter the same pause accounting and deadline guard.
  • Decisions use rank-identical request state and rank 0's broadcast clock. PEFT pages remain claimed for paused and displaced decodes.

Configuration

Set exactly one field on the GEN worker; neither means disabled:

scheduler_config:
  gen_preemption:
    tpot_budget: 0.10
    # target_output_tps: 35.0  # alternative: output-rate floor for ~80% of requests

Requires the auto GEN admission policy (0 < TLLM_GEN_ADMISSION_TTFT_PERCENTILE < 99) and the V2 KV scheduler. Pipeline parallelism and attention DP are rejected. Startup and DFlash's config-time fit check exclude headroom when prerequisites disable preemption.

Pausing releases batch slots, not KV pages. Size caches for active plus paused requests; full-attention demand still depends on sequence lengths. GEN workers cannot recompute context, and Helix CP raises on decode allocation failure. Pool sizing assumes one executor per process.

Performance evidence

Earlier adaptive-controller GPU run: Kimi-K3, 32 GB300 GPUs, DWDP16 context, Helix-CP16 GEN, AgentX c220, batch 128, 3600 s:

Metric Admission only tpot_budget: 0.10
TTFT p90 13.48 s 10.99 s
Mean TPOT 24.2 ms 25.8 ms
Total tokens/s/GPU 20,165 20,061

The measured controller inflation was 7.7% against its 8% setpoint. These results predate the review fixes and compaction; no new GPU performance run was performed. target_output_tps is simulation-validated only.

Validation

Focused coverage retains admission/victim boundaries, controller accounting and limits, output-rate slack/credit, rank-identical decisions, startup prerequisites, forced-resume displacement accounting, drafter retention/reclamation, PEFT residency, and cache sizing. Existing cache tests are parameterized rather than duplicated. Config/schema validation and the mixed-precision transfer regression remain included.

  • Repository pre-commit hooks, Python syntax, and diff checks.
  • UT execution left to CI as requested; no new runtime or GPU validation.

…ests in place

On a saturated disagg GEN worker every max_num_active_requests slot is
taken, so a waiting request whose TTFT is about to miss the GEN admission
target can only wait for a request to finish. This adds opt-in slot
preemption: when no slot is free and the request the admission queue pops
next has at most TLLM_GEN_PREEMPT_SLACK_S of slack left against the auto
policy's target X (X - (age + s2f) in [0, slack]), a running decode request
is paused and the freed slot admits the waiter.

A paused request is paused in place: it stays resident (KV, KDA/Mamba
state, draft KV, DSpark rolling window and sequence slot are kept), it is
only left out of the scheduled batch and out of the admission count. So a
pause costs no copy and no extra step, and the scheduled batch (and every
CUDA graph) stays within max_batch_size. The pools holding one entry per
resident request reserve TLLM_GEN_PREEMPT_MAX_PAUSED more entries: the
sequence-slot pool, the V2 KV index pool, the V2 recurrent-state pool (and
its memory estimate) and the DSpark rolling-window slots. Paused requests
resume ahead of any new admission, oldest first, as slots free up, and
after TLLM_GEN_PREEMPT_MAX_PAUSE_S regardless.

TLLM_GEN_PREEMPT_POLICY picks the victim: newest (tail order), wait
(longest resident), tps (only requests above TLLM_GEN_PREEMPT_TARGET_TPS
since their first token, also over the expected pause; largest margin
first) or long (most KV). Guardrails: one pause per request, 2 s run time
since the first token, one pause per pass, near-finished requests kept.
Every decision uses rank-identical inputs only (active requests, token and
decode-iteration counts, the broadcast queue and rank 0's clock), so it
also runs under helix. The existing helix allocation-failure error stays.

Off by default (policy off, max paused 0): no pool grows and nothing
changes. Needs the auto GEN admission policy; disabled with one info log
otherwise, or under attention DP / PP, or when a pool is short. Rank 0
logs a stat line every 30 s.

Signed-off-by: Lizhi Zhou <1432185+reasonsolo@users.noreply.github.com>
… in place

GEN slot preemption pauses a decode request in place: it stays resident
but is left out of the scheduled batch, and its id reaches the spec
metadata as paused_in_place_ids. The DSv4 DSpark rolling-window path
already keeps such a request's window, but the standalone DSpark worker
(DSparkWorker) and DFlash run DFlashSpecMetadata.prepare, which frees the
drafter context slot of every request missing from the batch. A paused
request then lost its slot, context length and chunk position, and
drafted after resume from an empty context like a fresh disagg GEN
arrival.

- DFlashSpecMetadata.prepare keeps the slots of paused_in_place_ids; a
  request that finishes after a pause (neither batched nor paused) is
  still released.
- DFlashWorker sizes its request slots like the other per-resident pools:
  max_batch plus gen_preemption.resident_headroom() (0 when preemption
  is off, so nothing changes by default), with the dummy slot after
  them. The private ctx arena, the per-slot context lengths and the
  block-table rows follow num_slots; _batch_to_slot stays per batch row.

Signed-off-by: Lizhi Zhou <1432185+reasonsolo@users.noreply.github.com>
…MPT_LATE_TRIGGER)

GEN slot preemption pauses a running decode request only when the GEN
admission queue's next pop is in the slack tier with slack against the
adaptive target X in [0, TLLM_GEN_PREEMPT_SLACK_S]. A waiter that is
already late (slack < 0), or a next pop from the guard or breaker tier,
never triggers a pause, so under sustained overload the trigger goes
quiet exactly when the queue is furthest behind.

TLLM_GEN_PREEMPT_LATE_TRIGGER=1 drops the lower bound and the tier
condition: the next pop is at risk whenever it is keyed and its slack is
at most SLACK_S, late or not, and num_at_risk counts every keyed waiter
in that range. The trigger stays head-only and the per-pass budget is
unchanged. Default 0 keeps the current behaviour. The flag is a
GenPreemptionConfig field, so the startup "enabled" line shows it.

Meant to run with TLLM_GEN_PREEMPT_MAX_PER_REQUEST=2.

Tests: late and guard-tier next pops trigger only with the flag, an
on-time next pop with too much slack never does; a request is paused
twice through the executor pass (resume lane, hysteresis) and its third
pause is refused at max_per_request=2; the startup line shows the knobs.

Signed-off-by: Lizhi Zhou <1432185+reasonsolo@users.noreply.github.com>
…et_output_tps) and an adaptive TPOT-budget controller

Replace the TLLM_GEN_PREEMPT_* environment knobs with
scheduler_config.gen_preemption (prototype) and derive every other
parameter online.

Config: set at most one of
- tpot_budget: allowed mean-TPOT increase from pauses, in (0, 1);
- target_output_tps: per-request output tokens/s to keep (> 0), converted to
  budget = max(0, R0 / target - 1) with R0 the measured unpaused per-request
  rate (GenPreemptionSettings.budget). Nothing is paused at a zero budget.
Neither: off (no pool grows). Both: validation error. Pipeline parallelism
and attention DP are rejected in TorchLlmArgs validation; PP is checked again
at executor setup with a ValueError. A missing auto GEN admission policy or
KV cache manager V2 scheduler disables preemption with one warning.

Policy (sim phase 21): with D the running mean decode time and R0 = 1 / the
running mean TPOT of completed requests (pauses excluded, 500 completions),
- at-risk window g x 0.15 D; g in [0.25, 2] is an integral controller, one
  step per completion once the admission target X is set, time constant 3000
  completions, holding the mean TPOT inflation from pauses at 0.8 x budget;
- victim: the longest resident request, ties newest (victim_key); the
  newest / tps / long policies are removed;
- paused cap 0.375 x max_num_active_requests (also the pool headroom);
  forced resume after 0.35 D, minimum decode 0.07 D (10 s / 2 s until the
  first completion); late trigger always on; 2 pauses per request, 1 per
  pass.
Inputs stay rank-identical (completions are requests leaving the active
list, timed on rank 0's broadcast clock); no new collective.

Pools are sized from the settings installed at executor creation
(gen_preemption.set_active_settings) instead of the environment; the
executor gets its settings through the PyExecutor constructor. The 30 s
rank-0 stat line adds g, the window, D, R0, the budget and the TPOT
inflation of the window's completions. Telemetry manifest and the
disaggregated-serving docs cover the two fields.

Tests: settings, exclusivity and bounds, the R0 / target conversion, pool
headroom, wait victim order and zero-budget gating, guardrails, controller
(warm start, fixed budget, one step per completion, no update before X or
without a budget, clamps, convergence from g = 0.25 / 1 / 2 on a toy plant),
executor pass and setup (PP rejection), llm_args round trip and validation.

Signed-off-by: Lizhi Zhou <1432185+reasonsolo@users.noreply.github.com>
…objective (laxity victims, sacrifice credit)

target_output_tps no longer converts to a TPOT budget (max(0, R0 / T - 1)).
It is now a service-level objective: T is a per-request output-rate floor
that at least 1 - eps of the requests meet (eps = 0.2, an internal constant).
tpot_budget keeps the phase-21 controller and wait victims unchanged.

Policy (k3-disagg-sim phase 24, SIMULATION 6.25):
- laxity L = t_first + (max_tokens - 1) / T - (now + remaining / r), r the
  request's own unpaused rate;
- victim: the largest L among requests with L >= 0.02 D and < 8 pauses,
  resumed when L is down to 0.01 D (or after 0.35 D); else a request
  already below T (L < 0 or sacrificed) with < 3 pauses, longest resident;
  else, with credit >= 1, sacrifice the longest resident (credit -= 1);
- credit per completion after X: clamp(credit + eps - [below T]
  + [sacrificed], +-3000 eps);
- resume lane: earliest forced-resume time first (least laxity);
- window fixed at 0.15 D (no controller), cap 0.375 x
  max_num_active_requests, late trigger on.
All inputs are rank-identical (token counts, max_tokens, completions, rank
0's broadcast clock); no new collective. The 30 s rank-0 stat line adds
below_target (window / total), credit, laxity / below-target / sacrificed
victims, mean laxity, laxity resumes and paused below-target requests.

Sim, 16 seeds vs off, T = control / 1.10: c220 DWDP16 p90 -2.69 s, TPOT
+5.7%, 12% of requests below T; DEP16 -2.02 s / +4.6% / 12%. c250 DWDP16
-3.51 s / +8.1%, DEP16 -3.35 s / +8.5%. Total tps within +-0.5%. E2E p90
0.3-1.9 s worse than tpot_budget at c220-c250. Not GPU-tested.

Tests: tpot_budget tests no longer go through the conversion; new
target_output_tps tests for laxity, victim classes and pause limits, the
laxity-margin forced resume, the credit bucket, least-laxity resume order,
no controller, the stat line, an executor pass and rank-identical inputs.

Signed-off-by: Lizhi Zhou <1432185+reasonsolo@users.noreply.github.com>
…m the change

Same user-facing config (tpot_budget / target_output_tps) and the same
decisions; the change is about half its previous size.

- gen_preemption.py: one per-request state object, one GenPreemption.step()
  entry point per scheduling pass (observe, resume, pause), the two modes as
  two victim strategies over shared pause/resume bookkeeping, a single
  resume lane ordered by due time, a short stat line, and executor setup
  checks (create_gen_preemption) moved out of PyExecutor.
- The late trigger is always on (it was never configurable), so
  GenAdmissionWaitingQueue.num_at_risk drops its flag.
- Pools add resident_headroom() unconditionally (it is 0 when preemption is
  off, and pipeline parallelism is rejected when it is on).
- Shorter llm_args descriptions and docs; focused, parametrized tests.

Signed-off-by: Lizhi Zhou <1432185+reasonsolo@users.noreply.github.com>
…e two user fields

GenPreemptionSettings now holds only tpot_budget / target_output_tps; the
policy constants are class attributes of GenPreemption and the paused cap is
a module function. No behavior change.

Signed-off-by: Lizhi Zhou <1432185+reasonsolo@users.noreply.github.com>
…ption-pr

Conflicts: PyExecutor.__init__ and SchedulerConfig fields (kept both sides);
test_gen_preemption.py follows main's tests/unittest/_torch/executor ->
tests/unittest/_torch/pyexecutor move.

Signed-off-by: Lizhi Zhou <1432185+reasonsolo@users.noreply.github.com>
@reasonsolo
reasonsolo marked this pull request as ready for review November 2, 2026 07:06
@reasonsolo
reasonsolo requested review from a team as code owners November 2, 2026 07:06
@reasonsolo reasonsolo added the api-compatible Accepted LLM API contract change that is backwards-compatible label Nov 2, 2026
@coderabbitai

coderabbitai Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Explain Change →

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • Resume reviews
  • Trigger review

Walkthrough

This change adds configurable generation-slot preemption to the PyExecutor. The controller can pause eligible decode requests when a waiting request is at risk, while retaining their request state. Scheduler, speculative-cache, and capacity logic now account for paused requests.

Changes

GEN Slot Preemption

Layer / File(s) Summary
Configuration and executor setup
tensorrt_llm/llmapi/llm_args.py, tensorrt_llm/_torch/pyexecutor/py_executor_creator.py, tensorrt_llm/_torch/pyexecutor/_util.py, tensorrt_llm/_torch/pyexecutor/py_executor.py, tensorrt_llm/usage/llm_args_golden_manifest.json, tests/unittest/llmapi/test_llm_args.py, docs/source/features/disagg-serving.md
Adds GenPreemptionConfig with mutually exclusive tpot_budget and target_output_tps settings. Validates unsupported parallelism modes and passes the configuration into executor setup. Adds usage-manifest entries and feature documentation.
Admission risk and preemption decisions
tensorrt_llm/_torch/pyexecutor/scheduler/gen_admission_queue.py, tensorrt_llm/_torch/pyexecutor/scheduler/gen_preemption.py, tests/unittest/_torch/pyexecutor/test_gen_preemption.py
Adds queue queries for the adaptive target and at-risk waiters. The controller tracks request completion and pause time, selects eligible requests, and manages pause and resume decisions for the configured policy.
Paused-request scheduler integration
tensorrt_llm/_torch/pyexecutor/py_executor.py, tensorrt_llm/_torch/pyexecutor/scheduler/scheduler.py, tensorrt_llm/_torch/pyexecutor/scheduler/scheduler_v2.py, tensorrt_llm/_torch/pyexecutor/engine/runners/decoder/inputs.py, tests/unittest/_torch/pyexecutor/kv_cache/test_kv_cache_v2_scheduler.py
Passes paused request IDs through the executor and scheduler. The V2 scheduler omits those requests from scheduling while retaining them in place, and decoder input preparation receives the paused IDs.
Resident capacity and speculative state
tensorrt_llm/_torch/pyexecutor/_util.py, tensorrt_llm/_torch/pyexecutor/kv_cache/*, tensorrt_llm/_torch/attention/backends/*/cache_manager.py, tensorrt_llm/_torch/speculative/dflash.py, tensorrt_llm/_torch/speculative/dspark.py, tests/unittest/_torch/pyexecutor/test_gen_preemption.py, tests/unittest/_torch/pyexecutor/kv_cache/test_kv_cache_estimation.py, tests/unittest/_torch/speculative/hw_agnostic/test_dflash_config_budget.py, tests/unittest/_torch/attention/*
Adds preemption headroom to sequence and cache capacity calculations. DFlash and DSpark retain paused requests’ slots and state, and allocate request slots for the added headroom.

Estimated code review effort: 4 (Complex) | ~45 minutes

Change: Feature

Sequence Diagram(s)

sequenceDiagram
  participant PyExecutor
  participant GenPreemption
  participant GenAdmissionWaitingQueue
  participant KVCacheV2Scheduler
  PyExecutor->>GenPreemption: Step with active requests and waiting queue
  GenPreemption->>GenAdmissionWaitingQueue: Check waiter risk
  GenAdmissionWaitingQueue-->>GenPreemption: Return at-risk waiter count
  GenPreemption-->>PyExecutor: Return updated active count and paused IDs
  PyExecutor->>KVCacheV2Scheduler: Pass paused IDs
Loading

Suggested reviewers: lowsfer, brnguyen2

Merge Risk: Low · previous review 1e813

Preemption remains mergeable with bounded follow-up: a narrow resume-order case can displace a live request unnecessarily, and two tests leave regressions undetected. Resolve those concerns before relying on the affected behavior.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 24.21% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documenta… Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed

Check name Status Explanation
Title check Passed The title names the main change: GEN slot preemption that pauses decode requests in place so at-risk waiting requests can be admitted. The changeset adds this feature, including the gen_preemption mod…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Description check Passed The description covers the core of the change. It states the purpose (opt-in GEN slot preemption on top of the TTFT-percentile admission queue), the mechanism (pausing a resident decode request and ke…
Full details: Title check

Explanation

The title names the main change: GEN slot preemption that pauses decode requests in place so at-risk waiting requests can be admitted. The changeset adds this feature, including the gen_preemption module, scheduler integration, config, KV pool headroom, and tests. The title follows the [None][feat] format from the repository template.

Full details: Description check

Explanation

The description covers the core of the change. It states the purpose (opt-in GEN slot preemption on top of the TTFT-percentile admission queue), the mechanism (pausing a resident decode request and keeping its KV, recurrent state, and DFlash/DSpark slots), the configuration (exactly one of tpot_budget or target_output_tps, with a YAML example), prerequisites and rejected configurations, KV-capacity implications, and a performance table from an earlier revision. It also lists the validation coverage. The template's Test Coverage section is filled in under Validation, and the PR Checklist is not addressed. The description does not state the PR title, and it does not say whether API-compatible or API-breaking labels apply. The description also says the GPU results predate the review fixes, and it says the target_output_tps option has simulation-only validation. The Validation section relies on CI for full unit-test execution, so runtime test status is not confirmed here. The description is mostly complete and follows the template's Description and Test Coverage intent, so it passes.

Full details: Docstring Coverage

Explanation

Docstring coverage is 24.21% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 95 functions across 22 files. (1 skipped: 1 unsupported.)

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

Finishing Touches

Generate unit tests (beta)

  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Tip

🎯 Customize your risk assessments

Guide how CodeRabbit assesses merge risk and security architecture risk. Highlight sensitive changes and explain your security boundaries using Merge Risk Instructions and Security Risk Instructions in your review settings. Security architecture risk assessments require the Advanced plan or above.

✅ Automatic approvals, with your rules

Let CodeRabbit approve pull requests once required threads are resolved, pre-merge checks pass, and your risk limits are met. Enable Automatic approvals in review settings, with overrides for teams or file paths.

@coderabbitai coderabbitai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Fix comments: Fix CodeRabbit comments on this PR

@reasonsolo

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #81955 [ run ] triggered by Bot. Commit: e5fe080 Link to invocation

Signed-off-by: Lizhi Zhou <1432185+reasonsolo@users.noreply.github.com>
@github-actions

github-actions Bot commented Nov 5, 2026

Copy link
Copy Markdown

Automatically added "ci: full pre-merge approved" because this PR has satisfied the required GitHub review approvals. Unresolved review conversations and other required checks remain independent merge requirements.

@reasonsolo

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #82791 [ run ] triggered by Bot. Commit: cec9b8d Link to invocation

@reasonsolo
reasonsolo enabled auto-merge (squash) November 5, 2026 11:56
@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #82791 [ run ] completed with state FAILURE. Commit: cec9b8d
/LLM/main/L0_MergeRequest_PR pipeline #68359 completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

CI Agent Failure Analysis

Link to invocation

@reasonsolo

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

Signed-off-by: Lizhi Zhou <1432185+reasonsolo@users.noreply.github.com>
@reasonsolo

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #82946 [ run ] triggered by Bot. Commit: 512d9dd Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #82946 [ run ] completed with state SUCCESS. Commit: 512d9dd
/LLM/main/L0_MergeRequest_PR pipeline #68511 completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

CI Agent Failure Analysis

Link to invocation

Signed-off-by: Lizhi Zhou <1432185+reasonsolo@users.noreply.github.com>
@reasonsolo

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #83037 [ run ] triggered by Bot. Commit: 4711535 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #83037 [ run ] completed with state FAILURE. Commit: 4711535
/LLM/main/L0_MergeRequest_PR pipeline #68593 completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

CI Agent Failure Analysis

Link to invocation

Signed-off-by: Lizhi Zhou <1432185+reasonsolo@users.noreply.github.com>
@reasonsolo

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #83189 [ run ] triggered by Bot. Commit: bc400db Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #83189 [ run ] completed with state SUCCESS. Commit: bc400db
/LLM/main/L0_MergeRequest_PR pipeline #68738 completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

CI Agent Failure Analysis

Link to invocation

@reasonsolo

Copy link
Copy Markdown
Collaborator Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #83216 [ run ] triggered by Bot. Commit: bc400db Link to invocation

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api-compatible Accepted LLM API contract change that is backwards-compatible ci: full pre-merge approved

Projects

None yet

Development

Successfully merging this pull request may close these issues.